home *** CD-ROM | disk | FTP | other *** search
/ Workbench Add-On / Workbench Add-On - Volume 1.iso / BBS-Archive / Dev / GNU-SMALLTALK.lha / examples / defwin.c < prev    next >
C/C++ Source or Header  |  1992-02-15  |  14KB  |  524 lines

  1. /***********************************************************************
  2.  *
  3.  *    This file produces a set of Smalltalk definitions that define much of
  4.  *    the interface to SunView.
  5.  *
  6.  ***********************************************************************/
  7.  
  8.  
  9. /***********************************************************************
  10.  *
  11.  * Copyright (C) 1990, 1991, 1992 Free Software Foundation, Inc.
  12.  * Written by Steve Byrne.
  13.  *
  14.  * This file is part of GNU Smalltalk.
  15.  *
  16.  * GNU Smalltalk is free software; you can redistribute it and/or modify it
  17.  * under the terms of the GNU General Public License as published by the Free
  18.  * Software Foundation; either version 1, or (at your option) any later 
  19.  * version.
  20.  * 
  21.  * GNU Smalltalk is distributed in the hope that it will be useful, but WITHOUT
  22.  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
  23.  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  24.  * more details.
  25.  * 
  26.  * You should have received a copy of the GNU General Public License along with
  27.  * GNU Smalltalk; see the file COPYING.  If not, write to the Free Software
  28.  * Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  
  29.  *
  30.  ***********************************************************************/
  31.  
  32.  
  33. #include <stdio.h>
  34. #include <ctype.h>
  35. #include <suntool/sunview.h>
  36. #include <suntool/panel.h>
  37. #include <suntool/canvas.h>
  38. #include <suntool/window.h>
  39. #include <suntool/textsw.h>
  40. #include <suntool/panel.h>
  41. #include <suntool/walkmenu.h>
  42. #include <suntool/icon.h>
  43.  
  44. #if defined(__STDC__) 
  45. #define ATTR_TAB(attr_name)  #attr_name, (long)(attr_name)
  46. #else
  47. #define ATTR_TAB(attr_name)  "attr_name", (long)(attr_name)
  48. #endif
  49.  
  50. struct attrStruct {
  51.   char    *name;
  52.   long    value;
  53. };
  54.            
  55. struct attrStruct panelAttrs[] = {
  56.   ATTR_TAB(PANEL_ITEM_X),
  57.   ATTR_TAB(PANEL_ITEM_X_GAP),
  58.   ATTR_TAB(PANEL_LABEL_X),
  59.   ATTR_TAB(PANEL_VALUE_X),
  60.   ATTR_TAB(PANEL_SLIDER_WIDTH),
  61.   ATTR_TAB(PANEL_WIDTH),
  62.   ATTR_TAB(PANEL_CHOICE_X),
  63.   ATTR_TAB(PANEL_MARK_X),
  64.   ATTR_TAB(PANEL_CHOICE_XS),
  65.   ATTR_TAB(PANEL_MARK_XS),
  66.   ATTR_TAB(PANEL_ITEM_Y),
  67.   ATTR_TAB(PANEL_ITEM_Y_GAP),
  68.   ATTR_TAB(PANEL_LABEL_Y),
  69.   ATTR_TAB(PANEL_VALUE_Y),
  70.   ATTR_TAB(PANEL_HEIGHT),
  71.   ATTR_TAB(PANEL_CHOICE_Y),
  72.   ATTR_TAB(PANEL_MARK_Y),
  73.   ATTR_TAB(PANEL_CHOICE_YS),
  74.   ATTR_TAB(PANEL_MARK_YS),
  75.   ATTR_TAB(PANEL_VALUE),
  76.   ATTR_TAB(PANEL_LABEL_DISPLAY_LENGTH),
  77.   ATTR_TAB(PANEL_VALUE_DISPLAY_LENGTH),
  78.   ATTR_TAB(PANEL_VALUE_STORED_LENGTH),
  79.   ATTR_TAB(PANEL_MIN_VALUE),
  80.   ATTR_TAB(PANEL_MAX_VALUE),
  81.   ATTR_TAB(PANEL_CHOICE_OFFSET),
  82.   ATTR_TAB(PANEL_TIMER_SECS),
  83.   ATTR_TAB(PANEL_TIMER_USECS),
  84.   ATTR_TAB(PANEL_MENU_CHOICE_VALUES),
  85.   ATTR_TAB(PANEL_VALUE_UNDERLINED),
  86.   ATTR_TAB(PANEL_ITEM_BOXED),
  87.   ATTR_TAB(PANEL_LABEL_BOLD),
  88.   ATTR_TAB(PANEL_CHOICES_BOLD),
  89.   ATTR_TAB(PANEL_SHOW_ITEM),
  90.   ATTR_TAB(PANEL_SHOW_VALUE),
  91.   ATTR_TAB(PANEL_SHOW_RANGE),
  92.   ATTR_TAB(PANEL_SHOW_MENU),
  93.   ATTR_TAB(PANEL_SHOW_MENU_MARK),
  94.   ATTR_TAB(PANEL_CHOOSE_ONE),
  95.   ATTR_TAB(PANEL_ADJUSTABLE),
  96.   ATTR_TAB(PANEL_BLINK_CARET),
  97.   ATTR_TAB(PANEL_ACCEPT_KEYSTROKE),
  98.   ATTR_TAB(PANEL_LABEL_SHADED),
  99.   ATTR_TAB(PANEL_TOGGLE_VALUE),
  100.   ATTR_TAB(PANEL_NOTIFY_LEVEL),
  101.   ATTR_TAB(PANEL_DISPLAY_LEVEL),
  102.   ATTR_TAB(PANEL_LAYOUT),
  103.   ATTR_TAB(PANEL_FEEDBACK),
  104.   ATTR_TAB(PANEL_PAINT),
  105.   ATTR_TAB(PANEL_MOUSE_STATE),
  106.   ATTR_TAB(PANEL_MASK_CHAR),
  107.   ATTR_TAB(PANEL_LABEL_STRING),
  108.   ATTR_TAB(PANEL_VALUE_STRING),
  109.   ATTR_TAB(PANEL_NOTIFY_STRING),
  110.   ATTR_TAB(PANEL_MENU_TITLE_STRING),
  111.   ATTR_TAB(PANEL_NAME),
  112.   ATTR_TAB(PANEL_CHOICE_STRINGS),
  113.   ATTR_TAB(PANEL_MENU_CHOICE_STRINGS),
  114.   ATTR_TAB(PANEL_CHOICE_STRING),
  115.   ATTR_TAB(PANEL_LABEL_IMAGE),
  116.   ATTR_TAB(PANEL_MENU_TITLE_IMAGE),
  117.   ATTR_TAB(PANEL_MENU_MARK_IMAGE),
  118.   ATTR_TAB(PANEL_MENU_NOMARK_IMAGE),
  119.   ATTR_TAB(PANEL_TYPE_IMAGE),
  120.   ATTR_TAB(PANEL_CHOICE_IMAGES),
  121.   ATTR_TAB(PANEL_MENU_CHOICE_IMAGES),
  122.   ATTR_TAB(PANEL_MARK_IMAGES),
  123.   ATTR_TAB(PANEL_NOMARK_IMAGES),
  124.   ATTR_TAB(PANEL_CHOICE_IMAGE),
  125.   ATTR_TAB(PANEL_MARK_IMAGE),
  126.   ATTR_TAB(PANEL_NOMARK_IMAGE),
  127.   ATTR_TAB(PANEL_LABEL_FONT),
  128.   ATTR_TAB(PANEL_VALUE_FONT),
  129.   ATTR_TAB(PANEL_MENU_TITLE_FONT),
  130.   ATTR_TAB(PANEL_FONT),
  131.   ATTR_TAB(PANEL_CHOICE_FONTS),
  132.   ATTR_TAB(PANEL_MENU_CHOICE_FONTS),
  133.   ATTR_TAB(PANEL_NOTIFY_PROC),
  134.   ATTR_TAB(PANEL_TIMER_PROC),
  135.   ATTR_TAB(PANEL_EVENT_PROC),
  136.   ATTR_TAB(PANEL_BACKGROUND_PROC),
  137.   ATTR_TAB(PANEL_ITEM_RECT),
  138.   ATTR_TAB(PANEL_PIXWIN),
  139.   ATTR_TAB(PANEL_CLIENT_DATA),
  140.   ATTR_TAB(PANEL_VERTICAL_SCROLLBAR),
  141.   ATTR_TAB(PANEL_HORIZONTAL_SCROLLBAR),
  142.   ATTR_TAB(PANEL_CURSOR),
  143.   ATTR_TAB(PANEL_CARET_ITEM),
  144.   ATTR_TAB(PANEL_FIRST_ITEM),
  145.   ATTR_TAB(PANEL_NEXT_ITEM),
  146.   ATTR_TAB(PANEL_PARENT_PANEL),
  147.   NULL, NULL
  148. };
  149.  
  150.  
  151.  
  152. struct attrStruct frameAttrs[] = {
  153.   ATTR_TAB(FRAME_CLOSED),
  154.   ATTR_TAB(FRAME_INHERIT_COLORS),
  155.   ATTR_TAB(FRAME_SHOW_LABEL),
  156.   ATTR_TAB(FRAME_SUBWINDOWS_ADJUSTABLE),
  157.   ATTR_TAB(FRAME_LABEL),
  158.   ATTR_TAB(FRAME_FOREGROUND_COLOR),
  159.   ATTR_TAB(FRAME_BACKGROUND_COLOR),
  160.   ATTR_TAB(FRAME_ICON),
  161.   ATTR_TAB(FRAME_CLOSED_X),
  162.   ATTR_TAB(FRAME_CLOSED_Y),
  163.   ATTR_TAB(FRAME_CLOSED_RECT),
  164.   ATTR_TAB(FRAME_CURRENT_RECT),
  165.   ATTR_TAB(FRAME_OPEN_RECT),
  166.   ATTR_TAB(FRAME_ARGS),
  167.   ATTR_TAB(FRAME_ARGC_PTR_ARGV),
  168.   ATTR_TAB(FRAME_CMDLINE_HELP_PROC),
  169.   ATTR_TAB(FRAME_BORDER_STYLE),
  170.   ATTR_TAB(FRAME_EMBOLDEN_LABEL),
  171.   ATTR_TAB(FRAME_NTH_WINDOW),
  172.   ATTR_TAB(FRAME_NTH_SUBWINDOW),
  173.   ATTR_TAB(FRAME_NTH_SUBFRAME),
  174.   ATTR_TAB(FRAME_DONE_PROC),
  175.   ATTR_TAB(FRAME_DEFAULT_DONE_PROC),
  176.   ATTR_TAB(FRAME_NO_CONFIRM),
  177.   ATTR_TAB(FRAME_NULL_ATTR),
  178.   NULL, NULL
  179. };
  180.  
  181.  
  182. struct attrStruct canvasAttrs[] = {
  183.   ATTR_TAB(CANVAS_PIXWIN),
  184.   ATTR_TAB(CANVAS_LEFT),
  185.   ATTR_TAB(CANVAS_TOP),
  186.   ATTR_TAB(CANVAS_WIDTH),
  187.   ATTR_TAB(CANVAS_HEIGHT),
  188.   ATTR_TAB(CANVAS_DEPTH),
  189.   ATTR_TAB(CANVAS_MARGIN),
  190.   ATTR_TAB(CANVAS_RETAINED),
  191.   ATTR_TAB(CANVAS_FIXED_IMAGE),
  192.   ATTR_TAB(CANVAS_REPAINT_PROC),
  193.   ATTR_TAB(CANVAS_RESIZE_PROC),
  194.   ATTR_TAB(CANVAS_AUTO_CLEAR),
  195.   ATTR_TAB(CANVAS_AUTO_EXPAND),
  196.   ATTR_TAB(CANVAS_AUTO_SHRINK),
  197.   ATTR_TAB(CANVAS_FAST_MONO),
  198.   NULL, NULL
  199. };
  200.  
  201.  
  202. struct attrStruct winAttrs[] = {
  203.   ATTR_TAB(WIN_ERROR_MSG),
  204.   ATTR_TAB(WIN_X),
  205.   ATTR_TAB(WIN_Y),
  206.   ATTR_TAB(WIN_RIGHT_OF),
  207.   ATTR_TAB(WIN_BELOW),
  208.   ATTR_TAB(WIN_WIDTH),
  209.   ATTR_TAB(WIN_HEIGHT),
  210.   ATTR_TAB(WIN_PERCENT_WIDTH),
  211.   ATTR_TAB(WIN_PERCENT_HEIGHT),
  212.   ATTR_TAB(WIN_COLUMNS),
  213.   ATTR_TAB(WIN_ROWS),
  214.   ATTR_TAB(WIN_RECT),
  215.   ATTR_TAB(WIN_SCREEN_RECT),
  216.   ATTR_TAB(WIN_FIT_HEIGHT),
  217.   ATTR_TAB(WIN_FIT_WIDTH),
  218.   ATTR_TAB(WIN_SHOW),
  219.   ATTR_TAB(WIN_MENU),
  220.   ATTR_TAB(WIN_CURSOR),
  221.   ATTR_TAB(WIN_HORIZONTAL_SCROLLBAR),
  222.   ATTR_TAB(WIN_VERTICAL_SCROLLBAR),
  223.   ATTR_TAB(WIN_EVENT_PROC),
  224.   ATTR_TAB(WIN_INPUT_DESIGNEE),
  225.   ATTR_TAB(WIN_GRAB_ALL_INPUT),
  226.   ATTR_TAB(WIN_KBD_INPUT_MASK),
  227.   ATTR_TAB(WIN_CONSUME_KBD_EVENT),
  228.   ATTR_TAB(WIN_IGNORE_KBD_EVENT),
  229.   ATTR_TAB(WIN_CONSUME_KBD_EVENTS),
  230.   ATTR_TAB(WIN_IGNORE_KBD_EVENTS),
  231.   ATTR_TAB(WIN_PICK_INPUT_MASK),
  232.   ATTR_TAB(WIN_CONSUME_PICK_EVENT),
  233.   ATTR_TAB(WIN_IGNORE_PICK_EVENT),
  234.   ATTR_TAB(WIN_CONSUME_PICK_EVENTS),
  235.   ATTR_TAB(WIN_IGNORE_PICK_EVENTS),
  236.   ATTR_TAB(WIN_FONT),
  237.   ATTR_TAB(WIN_TOP_MARGIN),
  238.   ATTR_TAB(WIN_BOTTOM_MARGIN),
  239.   ATTR_TAB(WIN_LEFT_MARGIN),
  240.   ATTR_TAB(WIN_RIGHT_MARGIN),
  241.   ATTR_TAB(WIN_ROW_HEIGHT),
  242.   ATTR_TAB(WIN_COLUMN_WIDTH),
  243.   ATTR_TAB(WIN_ROW_GAP),
  244.   ATTR_TAB(WIN_COLUMN_GAP),
  245.   ATTR_TAB(WIN_TYPE),
  246.   ATTR_TAB(WIN_OWNER),
  247.   ATTR_TAB(WIN_NAME),
  248.   ATTR_TAB(WIN_CLIENT_DATA),
  249.   ATTR_TAB(WIN_IMPL_DATA),
  250.   ATTR_TAB(WIN_FD),
  251.   ATTR_TAB(WIN_DEVICE_NAME),
  252.   ATTR_TAB(WIN_DEVICE_NUMBER),
  253.   ATTR_TAB(WIN_PIXWIN),
  254.   ATTR_TAB(WIN_MOUSE_XY),
  255.   ATTR_TAB(WIN_SHOW_UPDATES),
  256.   ATTR_TAB(WIN_OBJECT),
  257.   ATTR_TAB(WIN_GET_PROC),
  258.   ATTR_TAB(WIN_SET_PROC),
  259.   ATTR_TAB(WIN_PRESET_PROC),
  260.   ATTR_TAB(WIN_POSTSET_PROC),
  261.   ATTR_TAB(WIN_LAYOUT_PROC),
  262.   ATTR_TAB(WIN_NOTIFY_DESTROY_PROC),
  263.   ATTR_TAB(WIN_NOTIFY_EVENT_PROC),
  264.   ATTR_TAB(WIN_DEFAULT_EVENT_PROC),
  265.   ATTR_TAB(WIN_CREATED),
  266.   ATTR_TAB(WIN_COMPATIBILITY),
  267.   ATTR_TAB(WIN_COMPATIBILITY_INFO),
  268.   ATTR_TAB(WIN_REGISTER),
  269.   ATTR_TAB(WIN_NOTIFY_INFO),
  270.   ATTR_TAB(WIN_NULL_ATTR),
  271.   ATTR_TAB(WIN_KBD_FOCUS),
  272.   ATTR_TAB(WIN_EVENT_STATE),
  273.   NULL, NULL
  274. };
  275.  
  276.  
  277. struct attrStruct textswAttrs[] = {
  278.   ATTR_TAB(TEXTSW_ADJUST_IS_PENDING_DELETE),
  279.   ATTR_TAB(TEXTSW_AGAIN_LIMIT),
  280.   ATTR_TAB(TEXTSW_AGAIN_RECORDING),
  281.   ATTR_TAB(TEXTSW_AUTO_INDENT),
  282.   ATTR_TAB(TEXTSW_AUTO_SCROLL_BY),
  283.   ATTR_TAB(TEXTSW_BLINK_CARET),
  284.   ATTR_TAB(TEXTSW_BROWSING),
  285.   ATTR_TAB(TEXTSW_CHECKPOINT_FREQUENCY),
  286.   ATTR_TAB(TEXTSW_CLIENT_DATA),
  287.   ATTR_TAB(TEXTSW_CONFIRM_OVERWRITE),
  288.   ATTR_TAB(TEXTSW_CONTENTS),
  289.   ATTR_TAB(TEXTSW_CONTROL_CHARS_USE_FONT),
  290.   ATTR_TAB(TEXTSW_DESTROY_ALL_VIEWS),
  291.   ATTR_TAB(TEXTSW_DISABLE_CD),
  292.   ATTR_TAB(TEXTSW_DISABLE_LOAD),
  293.   ATTR_TAB(TEXTSW_EDIT_BACK_CHAR),
  294.   ATTR_TAB(TEXTSW_EDIT_BACK_LINE),
  295.   ATTR_TAB(TEXTSW_EDIT_BACK_WORD),
  296.   ATTR_TAB(TEXTSW_EDIT_COUNT),
  297.   ATTR_TAB(TEXTSW_ERROR_MSG),
  298.   ATTR_TAB(TEXTSW_ES_CREATE_PROC),
  299.   ATTR_TAB(TEXTSW_FILE),
  300.   ATTR_TAB(TEXTSW_FONT),
  301.   ATTR_TAB(TEXTSW_HEIGHT),
  302.   ATTR_TAB(TEXTSW_HISTORY_LIMIT),
  303.   ATTR_TAB(TEXTSW_IGNORE_LIMIT),
  304.   ATTR_TAB(TEXTSW_INSERT_MAKES_VISIBLE),
  305.   ATTR_TAB(TEXTSW_INSERT_ONLY),
  306.   ATTR_TAB(TEXTSW_INSERTION_POINT),
  307.   ATTR_TAB(TEXTSW_LENGTH),
  308.   ATTR_TAB(TEXTSW_LOAD_DIR_IS_CD),
  309.   ATTR_TAB(TEXTSW_LOWER_CONTEXT),
  310.   ATTR_TAB(TEXTSW_MEMORY_MAXIMUM),
  311.   ATTR_TAB(TEXTSW_MENU),
  312.   ATTR_TAB(TEXTSW_MODIFIED),
  313.   ATTR_TAB(TEXTSW_MULTI_CLICK_SPACE),
  314.   ATTR_TAB(TEXTSW_MULTI_CLICK_TIMEOUT),
  315.   ATTR_TAB(TEXTSW_MUST_SHOW_CARET),
  316.   ATTR_TAB(TEXTSW_NAME),
  317.   ATTR_TAB(TEXTSW_NAME_TO_USE),
  318.   ATTR_TAB(TEXTSW_NO_RESET_TO_SCRATCH),
  319.   ATTR_TAB(TEXTSW_NO_SELECTION_SERVICE),
  320.   ATTR_TAB(TEXTSW_NOTIFY_LEVEL),
  321.   ATTR_TAB(TEXTSW_NOTIFY_PROC),
  322.   ATTR_TAB(TEXTSW_PIXWIN),
  323.   ATTR_TAB(TEXTSW_READ_ONLY),
  324.   ATTR_TAB(TEXTSW_RESET_MODE),
  325.   ATTR_TAB(TEXTSW_STATUS),
  326.   ATTR_TAB(TEXTSW_STORE_CHANGES_FILE),
  327.   ATTR_TAB(TEXTSW_STORE_SELF_IS_SAVE),
  328.   ATTR_TAB(TEXTSW_TAB_WIDTH),
  329.   ATTR_TAB(TEXTSW_TOOL),
  330.   ATTR_TAB(TEXTSW_UPPER_CONTEXT),
  331.   ATTR_TAB(TEXTSW_WIDTH),
  332.   ATTR_TAB(TEXTSW_COALESCE_WITH),
  333.   ATTR_TAB(TEXTSW_END_ALL_VIEWS),
  334.   ATTR_TAB(TEXTSW_FOR_ALL_VIEWS),
  335.   ATTR_TAB(TEXTSW_FIRST),
  336.   ATTR_TAB(TEXTSW_FIRST_LINE),
  337.   ATTR_TAB(TEXTSW_LEFT_MARGIN),
  338.   ATTR_TAB(TEXTSW_LINE_BREAK_ACTION),
  339.   ATTR_TAB(TEXTSW_RIGHT_MARGIN),
  340.   ATTR_TAB(TEXTSW_SCROLLBAR),
  341.   ATTR_TAB(TEXTSW_UPDATE_SCROLLBAR),
  342.   ATTR_TAB(TEXTSW_SPARE_1),
  343.   ATTR_TAB(TEXTSW_SPARE_2),
  344.   NULL, NULL
  345. };
  346.  
  347.  
  348. struct attrStruct menuAttrs[] = {
  349.   ATTR_TAB(MENU_ACTION_PROC),
  350.   ATTR_TAB(MENU_ACTION),
  351.   ATTR_TAB(MENU_ACTION_IMAGE),
  352.   ATTR_TAB(MENU_ACTION_ITEM),
  353.   ATTR_TAB(MENU_APPEND_ITEM),
  354.   ATTR_TAB(MENU_APPEND),
  355.   ATTR_TAB(MENU_BOXED),
  356.   ATTR_TAB(MENU_CENTER),
  357.   ATTR_TAB(MENU_CLIENT_DATA),
  358.   ATTR_TAB(MENU_COLUMN_MAJOR),
  359.   ATTR_TAB(MENU_DEFAULT),
  360.   ATTR_TAB(MENU_DEFAULT_ITEM),
  361.   ATTR_TAB(MENU_DEFAULT_IMAGE),
  362.   ATTR_TAB(MENU_DISABLE_ITEM),
  363.   ATTR_TAB(MENU_DEFAULT_SELECTION),
  364.   ATTR_TAB(MENU_DESCEND_FIRST),
  365.   ATTR_TAB(MENU_FEEDBACK),
  366.   ATTR_TAB(MENU_FIRST_EVENT),
  367.   ATTR_TAB(MENU_FONT),
  368.   ATTR_TAB(MENU_GEN_PULLRIGHT),
  369.   ATTR_TAB(MENU_GEN_PULLRIGHT_IMAGE),
  370.   ATTR_TAB(MENU_GEN_PULLRIGHT_ITEM),
  371.   ATTR_TAB(MENU_GEN_PROC),
  372.   ATTR_TAB(MENU_GEN_PROC_IMAGE),
  373.   ATTR_TAB(MENU_GEN_PROC_ITEM),
  374.   ATTR_TAB(MENU_HEIGHT),
  375.   ATTR_TAB(MENU_IMAGE),
  376.   ATTR_TAB(MENU_IMAGE_ITEM),
  377.   ATTR_TAB(MENU_IMAGES),
  378.   ATTR_TAB(MENU_INITIAL_SELECTION),
  379.   ATTR_TAB(MENU_INITIAL_SELECTION_SELECTED),
  380.   ATTR_TAB(MENU_INITIAL_SELECTION_EXPANDED),
  381.   ATTR_TAB(MENU_INACTIVE),
  382.   ATTR_TAB(MENU_INSERT),
  383.   ATTR_TAB(MENU_INSERT_ITEM),
  384.   ATTR_TAB(MENU_ITEM),
  385.   ATTR_TAB(MENU_INVERT),
  386.   ATTR_TAB(MENU_JUMP_AFTER_SELECTION),
  387.   ATTR_TAB(MENU_JUMP_AFTER_NO_SELECTION),
  388.   ATTR_TAB(MENU_LAST_EVENT),
  389.   ATTR_TAB(MENU_LEFT_MARGIN),
  390.   ATTR_TAB(MENU_LIKE),
  391.   ATTR_TAB(MENU_MARGIN),
  392.   ATTR_TAB(MENU_MENU),
  393.   ATTR_TAB(MENU_NITEMS),
  394.   ATTR_TAB(MENU_NOTIFY_PROC),
  395.   ATTR_TAB(MENU_NTH_ITEM),
  396.   ATTR_TAB(MENU_NCOLS),
  397.   ATTR_TAB(MENU_NROWS),
  398.   ATTR_TAB(MENU_PARENT),
  399.   ATTR_TAB(MENU_PULLRIGHT),
  400.   ATTR_TAB(MENU_PULLRIGHT_DELTA),
  401.   ATTR_TAB(MENU_PULLRIGHT_IMAGE),
  402.   ATTR_TAB(MENU_PULLRIGHT_ITEM),
  403.   ATTR_TAB(MENU_RELEASE),
  404.   ATTR_TAB(MENU_RELEASE_IMAGE),
  405.   ATTR_TAB(MENU_REMOVE),
  406.   ATTR_TAB(MENU_REMOVE_ITEM),
  407.   ATTR_TAB(MENU_REPLACE),
  408.   ATTR_TAB(MENU_REPLACE_ITEM),
  409.   ATTR_TAB(MENU_RIGHT_MARGIN),
  410.   ATTR_TAB(MENU_SELECTED),
  411.   ATTR_TAB(MENU_SELECTED_ITEM),
  412.   ATTR_TAB(MENU_SHADOW),
  413.   ATTR_TAB(MENU_STAY_UP),
  414.   ATTR_TAB(MENU_STRING),
  415.   ATTR_TAB(MENU_STRING_ITEM),
  416.   ATTR_TAB(MENU_STRINGS),
  417.   ATTR_TAB(MENU_TITLE_ITEM),
  418.   ATTR_TAB(MENU_TITLE_IMAGE),
  419.   ATTR_TAB(MENU_TYPE),
  420.   ATTR_TAB(MENU_VALID_RESULT),
  421.   ATTR_TAB(MENU_VALUE),
  422.   ATTR_TAB(MENU_WIDTH),
  423.   ATTR_TAB(MENU_NOP),
  424.   ATTR_TAB(MENU_BUTTON),
  425.   ATTR_TAB(MENU_FD),
  426.   ATTR_TAB(MENU_IE),
  427.   ATTR_TAB(MENU_POS),
  428.   NULL, NULL
  429. };
  430.  
  431.  
  432. struct attrStruct iconAttrs[] = {
  433.   ATTR_TAB(ICON_X),
  434.   ATTR_TAB(ICON_Y),
  435.   ATTR_TAB(ICON_WIDTH),
  436.   ATTR_TAB(ICON_HEIGHT),
  437.   ATTR_TAB(ICON_IMAGE_RECT),
  438.   ATTR_TAB(ICON_LABEL_RECT),
  439.   ATTR_TAB(ICON_IMAGE),
  440.   ATTR_TAB(ICON_LABEL),
  441.   ATTR_TAB(ICON_FONT),
  442.   NULL, NULL
  443. };
  444.  
  445.  
  446. main()
  447. {
  448.   FILE *f;
  449.  
  450.   f = fopen("win.st", "w");
  451.  
  452.   emitDictDef(f, "PanelAttrs",    panelAttrs);
  453.   emitDictDef(f, "FrameAttrs",    frameAttrs);
  454.   emitDictDef(f, "CanvasAttrs", canvasAttrs);
  455.   emitDictDef(f, "WindowAttrs", winAttrs);
  456.   emitDictDef(f, "TextswAttrs", textswAttrs);
  457.   emitDictDef(f, "MenuAttrs",    menuAttrs);
  458.   emitDictDef(f, "IconAttrs",    iconAttrs);
  459.  
  460.   fclose(f);
  461. }
  462.  
  463. emitDictDef(f, dictName, attrs)
  464. FILE    *f;
  465. char    *dictName;
  466. struct attrStruct attrs[];
  467. {
  468.   struct attrStruct *asp;
  469.  
  470.   fprintf(f, "Smalltalk at: #%s put: Dictionary new!\n\n", dictName);
  471.  
  472.   fprintf(f, "%s findDefsFor: #(\n", dictName);
  473.   for (asp = attrs; asp->name; asp++) {
  474.     emitNameDef(f, dictName, asp);
  475.   }
  476.  
  477.   fprintf(f, ")\n!\n\n");
  478. }
  479.  
  480.  
  481. emitNameDef(f, dictName, asp)
  482. FILE    *f;
  483. char    *dictName;
  484. struct attrStruct *asp;
  485. {
  486.   char        buf[50];
  487.  
  488.   canonAttrName(asp->name, buf);
  489.   
  490. /*  fprintf(f, "%-15s at: #%-30s put: 16r%08X!\n", dictName, buf, asp->value); */
  491.   fprintf(f, "    (%-30s '%s')\n", buf, asp->name);
  492. }
  493.  
  494.  
  495. canonAttrName(attrName, buf)
  496. char    *attrName, *buf;
  497. {
  498.   char        *sp, *dp;
  499.   int        upper;
  500.  
  501.   upper = 0;
  502.  
  503.   for (sp = attrName, dp = buf; *sp; sp++) {
  504.     if (*sp == '_') {
  505.       upper = 1;
  506.       continue;
  507.     }
  508.  
  509.     if (upper) {
  510.       *dp++ = *sp;
  511.       upper = 0;
  512.     } else {
  513.       if (isupper(*sp)) {
  514.     *dp++ = tolower(*sp);
  515.       } else {
  516.     *dp++ = *sp;
  517.       }
  518.     }
  519.     
  520.   }
  521.  
  522.   *dp = '\0';
  523. }
  524.